//toernooiaanmaken
package model;

import componenten.Database;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Gebruiker
 */
public class Master {

    private int id;
    private String voornaam;
    private String achternaam;
    private String tussenvoegsels;
    private String geboortedatum;
    private String email;
    private int telefoon;
    private String woonplaats;
    private String straat;
    private String huisnummer;
    private String postcode;
    private String bijnaam;
    private ArrayList bericht;
    private boolean gevalideerd;

    public Master() {

        this.voornaam = "";
        this.achternaam = "";
        this.tussenvoegsels = "";
        this.geboortedatum = "yyyy-mm-dd";
        this.email = "";
        this.telefoon = 0;
        this.woonplaats = "";
        this.straat = "";
        this.huisnummer = "";
        this.postcode = "";
        this.bijnaam = "";
        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }

    public Master(String argId) {

        String sql = "SELECT * FROM master join persoon on master.persoon_id = persoon.persoon_id where master.persoon_id = " + argId;
        System.out.print(sql);

        try {

            ResultSet result = Database.executeSelectQuery(sql);
            result.next();
            this.id = result.getInt("persoon_id");
            this.voornaam = result.getString("persoon_voornaam");
            this.achternaam = result.getString("persoon_achternaam");
            this.tussenvoegsels = result.getString("persoon_tussenvoegsel");
            this.geboortedatum = result.getString("persoon_geboortedatum");
            this.email = result.getString("persoon_email");
            this.telefoon = result.getInt("persoon_telefoon");
            this.woonplaats = result.getString("persoon_woonplaats");
            this.straat = result.getString("persoon_straat");
            this.huisnummer = result.getString("persoon_huisnummer");
            this.postcode = result.getString("persoon_postcode");
            this.bijnaam = result.getString("master_bijnaam");
         
        } catch (SQLException e) {
            System.out.print(e);
        }

        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }

    private void valideren() {

        if ("".equals(this.getVoornaam())) {
            this.getBericht().add("voornaam is verplicht");
            this.setGevalideerd(false);
        }
        if ("".equals(this.getAchternaam())) {
            this.getBericht().add("achternaam is verplicht");
            this.setGevalideerd(false);
        }
        if ("yyyy-mm-dd".equals(this.getGeboortedatum())) {
            this.getBericht().add("geboortedatum is verplicht");
            this.setGevalideerd(false);
        }
        if (this.getTelefoon() == 0) {
            this.getBericht().add("telefoon is verplicht");
            this.setGevalideerd(false);
        }
        if ("".equals(this.getWoonplaats())) {
            this.getBericht().add("woonplaats is verplicht");
            this.setGevalideerd(false);
        }

        if ("".equals(this.getStraat())) {
            this.getBericht().add("straat is verplicht");
            this.setGevalideerd(false);
        }
        if ("".equals(this.getHuisnummer())) {
            this.getBericht().add("huisnummer is verplicht");
            this.setGevalideerd(false);
        }
        if ("".equals(this.getPostcode())) {
            this.getBericht().add("postcode is verplicht");
            this.setGevalideerd(false);
        }
    }

    public boolean toevoegen() {
        this.valideren();
        if (this.isGevalideerd()) {

            String sqlQuery = "INSERT INTO fullhouse.persoon ("
                    + "persoon_voornaam, "
                    + "persoon_achternaam, "
                    + "persoon_tussenvoegsel, "
                    + "persoon_geboortedatum, "
                    + "persoon_email, "
                    + "persoon_telefoon, "
                    + "persoon_woonplaats, "
                    + "persoon_straat, "
                    + "persoon_huisnummer, "
                    + "persoon_postcode "
                    + ") VALUES ("
                    + "'" + this.voornaam + "'" + " , "
                    + "'" + this.achternaam + "'" + " , "
                    + "'" + this.tussenvoegsels + "'" + " , "
                    + "'" + this.geboortedatum + "'" + " , "
                    + "'" + this.email + "'" + " , "
                    + this.telefoon + " , "
                    + "'" + this.woonplaats + "'" + " , "
                    + "'" + this.straat + "'" + " , "
                    + "'" + this.huisnummer + "'" + " , "
                    + "'" + this.postcode + "'"
                    + ")";

            if (Database.executeInsertQuery(sqlQuery) != 1) {
                this.setGevalideerd(false);
                this.getBericht().add("Er is een fout onstaan tijdens het opslaan probeer opnieuw (persoon)");

            } else {

                String sqlQueryLid = "INSERT INTO fullhouse.master ("
                        + "master_bijnaam, "
                        + "persoon_id "
                        + ") VALUES ("
                        + "'" + this.getBijnaam() + "'" + " , "
                        + this.getLaatsteId()
                        + ")";
                if (Database.executeInsertQuery(sqlQueryLid) != 1) {
                    this.setGevalideerd(false);
                    this.getBericht().add("Er is een fout onstaan tijdens het opslaan probeer opnieuw (Master)");
                }
            }
        }
        return this.isGevalideerd();
    }

    public boolean bijwerken() {
        this.valideren();
        if (this.isGevalideerd()) {
            String sqlQuery = "UPDATE fullhouse.persoon SET "
                    + "persoon_voornaam = '" + this.voornaam + "'" + ", "
                    + "persoon_achternaam = '" + this.achternaam + "'" + ", "
                    + "persoon_tussenvoegsel = '" + this.tussenvoegsels + "'" + ", "
                    + "persoon_geboortedatum = '" + this.geboortedatum + "'" + ", "
                    + "persoon_email = '" + this.email + "'" + ", "
                    + "persoon_telefoon = " + this.telefoon + ", "
                    + "persoon_woonplaats = '" + this.woonplaats + "'" + ", "
                    + "persoon_straat = '" + this.straat + "'" + ", "
                    + "persoon_huisnummer = '" + this.huisnummer + "'" + ", "
                    + "persoon_postcode = '" + this.postcode + "' "
                    + "WHERE persoon_id = " + this.id;

            if (Database.executeInsertQuery(sqlQuery) != 1) {
                this.setGevalideerd(false);
                this.getBericht().add("Er is een fout onstaan tijdens het bijwerken probeer opnieuw (persoon)");

            } else {

                String sqlQueryLid = "UPDATE fullhouse.master SET "
                        + "master_bijnaam = '" + this.getBijnaam() + "'"
                        + "WHERE persoon_id = " + this.id;

                if (Database.executeUpdateQuery(sqlQueryLid) != 1) {
                    this.setGevalideerd(false);
                    this.getBericht().add("Er is een fout onstaan tijdens het bijwerken probeer opnieuw");
                }
            }
        }
        return this.isGevalideerd();
    }

    public int getLaatsteId() {

        String query = "SELECT LAST_INSERT_ID()";
        ResultSet result = Database.executeSelectQuery(query);
        int laatsteid = 0;

        try {
            if (result.next()) {
                laatsteid = result.getInt("LAST_INSERT_ID()");
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage() + "\n" + e.getSQLState() + "\n" + e.getErrorCode());
            System.out.println(e.toString());
        }
        return laatsteid;
    }

    /**
     * @return the naam
     */

    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the voornaam
     */
    public String getVoornaam() {
        return voornaam;
    }

    /**
     * @param voornaam the voornaam to set
     */
    public void setVoornaam(String voornaam) {
        this.voornaam = voornaam;
    }

    /**
     * @return the achternaam
     */
    public String getAchternaam() {
        return achternaam;
    }

    /**
     * @param achternaam the achternaam to set
     */
    public void setAchternaam(String achternaam) {
        this.achternaam = achternaam;
    }

    /**
     * @return the tussenvoegsels
     */
    public String getTussenvoegsels() {
        return tussenvoegsels;
    }

    /**
     * @param tussenvoegsels the tussenvoegsels to set
     */
    public void setTussenvoegsels(String tussenvoegsels) {
        this.tussenvoegsels = tussenvoegsels;
    }

    /**
     * @return the geboortedatum
     */
    public String getGeboortedatum() {
        return geboortedatum;
    }

    /**
     * @param geboortedatum the geboortedatum to set
     */
    public void setGeboortedatum(String geboortedatum) {
        this.geboortedatum = geboortedatum;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the telefoon
     */
    public int getTelefoon() {
        return telefoon;
    }

    /**
     * @param telefoon the telefoon to set
     */
    public void setTelefoon(String telefoon) {
        try {
            this.telefoon = Integer.parseInt(telefoon);
        } catch (NumberFormatException e) {
            this.setGevalideerd(false);
            this.getBericht().add("Voer een geldig nummer in allen gehele getallen boven de 0" + e.getMessage());
        }
    }

    /**
     * @return the woonplaats
     */
    public String getWoonplaats() {
        return woonplaats;
    }

    /**
     * @param woonplaats the woonplaats to set
     */
    public void setWoonplaats(String woonplaats) {
        this.woonplaats = woonplaats;
    }

    /**
     * @return the straat
     */
    public String getStraat() {
        return straat;
    }

    /**
     * @param straat the straat to set
     */
    public void setStraat(String straat) {
        this.straat = straat;
    }

    /**
     * @param bericht the bericht to set
     */
    public void setBericht(ArrayList bericht) {
        this.bericht = bericht;
    }

    public void resetBericht() {
        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }

    public ArrayList getBericht() {
        return bericht;
    }

    public String getPostcode() {
        return postcode;
    }

    /**
     * @param postcode the postcode to set
     */
    public void setPostcode(String postcode) {
        this.postcode = postcode;
    }

    /**
     * @return the huisnummer
     */
    public String getHuisnummer() {
        return huisnummer;
    }

    /**
     * @param huisnummer the huisnummer to set
     */
    public void setHuisnummer(String huisnummer) {
        this.huisnummer = huisnummer;
    }

    /**
     * @param gevalideerd the gevalideerd to set
     */
    public void setGevalideerd(boolean gevalideerd) {
        this.gevalideerd = gevalideerd;
    }

    public boolean isGevalideerd() {
        return gevalideerd;
    }

    public String[] getInformatie() {
        return new String[]{this.voornaam + " " + this.achternaam, this.bijnaam, this.postcode, this.woonplaats, this.huisnummer, "" + this.id};
    }

    /**
     * @return the bijnaam
     */
    public String getBijnaam() {
        return bijnaam;
    }

    /**
     * @param bijnaam the bijnaam to set
     */
    public void setBijnaam(String bijnaam) {
        this.bijnaam = bijnaam;
    }
}